home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / DockExtenders / Launch / Source / Main.m < prev    next >
Text File  |  1994-04-29  |  3KB  |  171 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import "Main.h"
  5. #import <appkit/Application.h>
  6. #import <appkit/Speaker.h>
  7. #import <appkit/Listener.h>
  8. #import <appkit/Button.h>
  9. #import <appkit/Panel.h>
  10. #import <appkit/Matrix.h>
  11. #import <sys/param.h>
  12. #import <defaults/defaults.h>
  13. #import <string.h>
  14. #import <libc.h>
  15.  
  16. #define APPNAME "Launch"
  17.  
  18. @implementation Main
  19.  
  20. // The application speaker
  21. id speaker=nil;
  22.  
  23. extern char loginScript[1024];
  24. extern char logoutScript[1024];
  25.  
  26. // The auto-launching preferences.
  27. int onauto=0;
  28. char *autodefs[]={"ExecuteAndQuit", "Execute", "Ask", "Nothing", NULL};
  29. int logout=0;
  30. char *logoutdefs[]={"Execute", "Ask", "Nothing", NULL};
  31. #define LO_EXECUTE 0
  32. #define LO_ASK 1
  33. #define LO_NOTHING 2
  34.  
  35. - appDidInit:sender;
  36. {
  37.     speaker = [NXApp appSpeaker];
  38.     [self readPrefs];
  39.     return self;
  40. }
  41.  
  42.  
  43. /* If the user logs out/powers off, we get one of these messages.*/
  44. - app:sender powerOffIn:(int)ms andSave:(int)aFlag
  45. {
  46.     [self ask:logoutScript];
  47.     return self;
  48. }
  49. - powerOff:(NXEvent *)theEvent
  50. {
  51.     [self ask:logoutScript];
  52.     return self;
  53. }
  54. - testLogout:sender
  55. {
  56.     return [self ask:logoutScript];
  57. }
  58.  
  59. - ask:(char *)script
  60. {
  61.     if (logout == LO_ASK)
  62.     {
  63.         int reply = NXRunAlertPanel("Launch", "Execute script\n%s?", "OK", "No", NULL, script);
  64.         if (reply == NX_ALERTDEFAULT) [self execute:script];
  65.     }
  66.     else
  67.     {
  68.         if (logout == LO_EXECUTE)
  69.             [self execute:script];
  70.     }
  71.     return self;
  72. }
  73.  
  74.  
  75. // Execute the script by forking and overlaying, so Launch stays around.
  76. - execute:(char *)script
  77. {
  78.     int pid;
  79.     pid = vfork();
  80.     // Child executes script.
  81.     if (pid==0) execl(script, ".Launch", 0);
  82.     return self;
  83. }
  84.  
  85. - executeLogin:sender
  86. {
  87.     return [self execute:loginScript];
  88. }
  89.  
  90. - executeLogout:sender
  91. {
  92.     return [self execute:logoutScript];
  93. }
  94.  
  95.  
  96. // Send a message to Edit to open the file.
  97. - open:(char *)script
  98. {
  99.     int msgDelivered, fileOpened; 
  100.     port_t    editport;
  101.     
  102.     // Find Edit's port.
  103.     editport = NXPortFromName("Edit", NULL);
  104.     
  105.     if (editport==PORT_NULL)
  106.     {
  107.         // An unlikely event, but you never know.
  108.         NXRunAlertPanel(APPNAME, "Cannot get Edit's port.", "OK", NULL, NULL);
  109.         [openItem setEnabled:NO];
  110.     }
  111.     else
  112.     {
  113.         // Edit is the receiving app.
  114.         [speaker setSendPort:editport];
  115.         msgDelivered = [speaker openFile:script ok:&fileOpened];
  116.         if ((msgDelivered!=0) || (fileOpened==NO))
  117.             NXRunAlertPanel(APPNAME, "Cannot open script %s", "OK", NULL, NULL, script);
  118.     }
  119.     return self;
  120. }
  121.  
  122. - openLogin:sender
  123. {
  124.     return [self open:loginScript];
  125. }
  126.  
  127. - openLogout:sender
  128. {
  129.     return [self open:logoutScript];
  130. }
  131.  
  132. - readPrefs;
  133. {
  134.     char const *def;
  135.     int i;
  136.     
  137.     def = NXGetDefaultValue(APPNAME, "OnAutoLaunch");
  138.     for (i=0;autodefs[i]!=NULL;i++)
  139.         if (strcmp(autodefs[i], def)==0) onauto = i;
  140.     
  141.     def = NXGetDefaultValue(APPNAME, "OnLogout");
  142.     for (i=0;logoutdefs[i]!=NULL;i++)
  143.         if (strcmp(logoutdefs[i], def)==0) logout = i;
  144.     
  145.     return self;
  146. }
  147.  
  148. - writePrefs;
  149. {
  150.     NXWriteDefault(APPNAME, "OnAutoLaunch", autodefs[onauto]);
  151.     NXWriteDefault(APPNAME, "OnLogout", logoutdefs[logout]);
  152.     return self;
  153. }
  154.  
  155. - showPrefs:sender
  156. {
  157.     [onautoSwitch selectCellWithTag:onauto];
  158.     [logoutSwitch selectCellWithTag:logout];
  159.     [prefsPanel makeKeyAndOrderFront:self];
  160.     return self;
  161. }
  162.  
  163. - okPrefs:sender
  164. {
  165.     onauto = [[onautoSwitch selectedCell] tag];
  166.     logout = [[logoutSwitch selectedCell] tag];
  167.     [self writePrefs];
  168.     return self;
  169. }
  170. @end
  171.